<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: 使用多个标签页的命令</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/tabpage.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>tabpage</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="tabpage.txt">tabpage.txt</a> </b>   适用于 Vim 9.0 版本。   最近更新: 2022年9月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Willis


多标签页窗口编辑                                        <b class="vimtag"> <a name="tab-page">tab-page</a> </b> <b class="vimtag"> <a name="tabpage">tabpage</a> </b>

这里解释新加入的处理多标签页的命令。另外，也提供因为和多于一个标签页组合使用而
行为不同的命令的解释。

1. 简介                          <a href="tabpage.html#tab-page-intro">tab-page-intro</a> 
2. 命令                          <a href="tabpage.html#tab-page-commands">tab-page-commands</a> 
3. 其它项目                      <a href="tabpage.html#tab-page-other">tab-page-other</a> 
4. 设置 <a href="options.html#'tabline'">'tabline'</a>                <a href="tabpage.html#setting-tabline">setting-tabline</a> 
5. 设置 <a href="options.html#'guitablabel'">'guitablabel'</a>            <a href="tabpage.html#setting-guitablabel">setting-guitablabel</a> 

<code class="notvi">{仅当编译时加入  <a href="various.html#+windows">+windows</a>  特性才能使用多标签页}</code>

</section><hr class="doubleline" /><section class=inner>
<h4>1. 简介                                         <b class="vimtag"> <a name="tab-page-intro">tab-page-intro</a> </b></h4>
一个标签页容纳一或多个窗口。标签页间很容易切换，这种方式使你可以拥有多个窗口集
合，每个集合做不同的工作。

通常你会在 Vim 窗口顶部看到一组标签的列表，每个标签页一个。用鼠标点击标签可以
跳转到对应的标签页。下面还介绍在其它标签页间移动的方式。

多数命令只能用于当前标签页，其中包括  <a href="index.html#CTRL-W">CTRL-W</a>  命令、 <a href="windows.html#:windo">:windo</a> 、 <a href="windows.html#:all">:all</a>  和
 <a href="windows.html#:ball">:ball</a>  (除非用  <a href="tabpage.html#:tab">:tab</a>  修饰符)。
下面会列出那些能意识到有其它标签页存在的命令。

标签页也是临时编辑某个缓冲区而不用修改当前窗口布局的好方法。只要打开新标签页，
做你想做的事，然后关闭该标签页就可以了。

</section><hr class="doubleline" /><section class=inner>
<h4>2. 命令                                                 <b class="vimtag"> <a name="tab-page-commands">tab-page-commands</a> </b></h4>
打 开 新 标 签 页:

启动 Vim 时用 "vim -p filename ..." 为每个文件参数打开一个新标签页 (标签页个数
不能超过 <a href="options.html#'tabpagemax'">'tabpagemax'</a>)。见  <a href="starting.html#-p">-p</a> 

非 GUI 标签页行上双击鼠标打开新的空白标签页。该标签页出现在点击位置的左侧。第
一击可能会先选择不同的标签页，从而导致额外的屏幕刷新。

在一些 GUI 版本上，特别是 Win32 和 Motif，也可以这么用。但必须在所有标签右侧点
击。

GUI 标签页行可以用鼠标右键打开菜单。 <a href="tabpage.html#tabline-menu">tabline-menu</a> 。

相关的自动命令可见  <a href="tabpage.html#tabnew-autocmd">tabnew-autocmd</a> 。

:<code class="special">[count]</code>tabe[dit]                               <b class="vimtag"> <a name=":tabe">:tabe</a> </b> <b class="vimtag"> <a name=":tabedit">:tabedit</a> </b> <b class="vimtag"> <a name=":tabnew">:tabnew</a> </b>
:<code class="special">[count]</code>tabnew
                在当前标签页之后打开带空窗口的新标签页。
                如果给出 <code class="special">[count]</code>，新标签页出现在第 <code class="special">[count]</code> 个标签页之后，否则
                新标签页出现在当前页之后。 
<code class="example">                    :tabnew     " 在当前页之后打开标签页</code>
<code class="example">                    :.tabnew    " 同上</code>
<code class="example">                    :+tabnew    " 在下页之后打开标签页</code>
<code class="example">                                " 备注: 这比 :tabnew 要后一个位置</code>
<code class="example">                    :-tabnew    " 在当前页之前打开标签页</code>
<code class="example">                    :0tabnew    " 在首页之前打开标签页</code>
<code class="example">                    :$tabnew    " 在末页之后打开标签页</code>
<code class="example"></code>
:<code class="special">[count]</code>tabe[dit] <code class="special">[++opt]</code> <code class="special">[+cmd]</code> <code class="special">{file}</code>
:<code class="special">[count]</code>tabnew <code class="special">[++opt]</code> <code class="special">[+cmd]</code> <code class="special">{file}</code>
                打开新标签页并编辑 <code class="special">{file}</code>，其余和  <a href="editing.html#:edit">:edit</a>  类同。关于 <code class="special">[count]</code>
                见上面的  <a href="tabpage.html#:tabnew">:tabnew</a> 。

:<code class="special">[count]</code>tabf[ind] <code class="special">[++opt]</code> <code class="special">[+cmd]</code> <code class="special">{file}</code>                 <b class="vimtag"> <a name=":tabf">:tabf</a> </b> <b class="vimtag"> <a name=":tabfind">:tabfind</a> </b>
                打开新标签页并编辑 <a href="options.html#'path'">'path'</a> 里的 <code class="special">{file}</code>，其余和  <a href="editing.html#:find">:find</a>  类同。关
                于 <code class="special">[count]</code> 见上面的  <a href="tabpage.html#:tabnew">:tabnew</a> 。

:<code class="special">[count]</code>tab <code class="special">{cmd}</code>                                       <b class="vimtag"> <a name=":tab">:tab</a> </b>
                执行 <code class="special">{cmd}</code>，如果它打开新窗口，使用新标签页代替。不能用于
                 <a href="diff.html#:diffsplit">:diffsplit</a> 、 <a href="diff.html#:diffpatch">:diffpatch</a> 、 <a href="eval.html#:execute">:execute</a>  和  <a href="various.html#:normal">:normal</a> 。
                如果给出 <code class="special">[count]</code>，新标签页出现在第 <code class="special">[count]</code> 个标签页之后，否则
                新标签页出现在当前页之后。
                例如: 
<code class="example">                    :tab split      " 在新标签页上打开当前缓冲区</code>
<code class="example">                    :tab help gt    " 打开标签页显示 "gt" 的帮助</code>
<code class="example">                    :.tab help gt   " 同上</code>
<code class="example">                    :+tab help      " 在下页之后打开标签页显示帮助</code>
<code class="example">                    :-tab help      " 在当前页之前打开标签页显示帮助</code>
<code class="example">                    :0tab help      " 在首页之前打开标签页显示帮助</code>
<code class="example">                    :$tab help      " 在末页之后打开标签页显示帮助</code>
<code class="example"></code>
<code class="keystroke">CTRL-W</code> gf       打开新标签页并编辑光标所在的文件名。见  <a href="windows.html#CTRL-W_gf">CTRL-W_gf</a> 。

<code class="keystroke">CTRL-W</code> gF       打开新标签页，编辑光标所在的文件名并转到文件名后的行号上。见
                 <a href="windows.html#CTRL-W_gF">CTRL-W_gF</a> 。

关 闭 标 签 页:

关闭标签页的最后一个窗口同时也关闭该标签页，除非它是唯一的标签页。

使用鼠标: 如果显示标签页行，点击右上角的 "X" 可以关闭当前标签页。如果使用自定
义的  <a href="options.html#'tabline'">'tabline'</a> ，显示内容可能有所不同。

                                                        <b class="vimtag"> <a name=":tabc">:tabc</a> </b> <b class="vimtag"> <a name=":tabclose">:tabclose</a> </b>
:tabc[lose][!]  关闭当前标签页。
                如下情形使该命令失败:
                - 屏幕上只有一个标签页。                                <b class="vimtag"> <a name="E784">E784</a> </b>
                - 如果 <a href="options.html#'hidden'">'hidden'</a> 没有置位，没有 [!]，缓冲区有修改，而且该缓冲区
                  没有其它窗口。
                缓冲区的修改不会被写入，也不会丢失。所以这可以说是个 "安全的"
                命令。 
<code class="example">                    :tabclose       " 关闭当前标签页</code>
<code class="example"></code>
:tabc[lose][!] <code class="special">{count}</code>
                关闭第 <code class="special">{count}</code> 个标签页。失败条件和上面的  <a href="tabpage.html#:tabclose">:tabclose</a>  相同。 
<code class="example">                    :-tabclose      " 关闭上个标签页</code>
<code class="example">                    :+tabclose      " 关闭下个标签页</code>
<code class="example">                    :1tabclose      " 关闭首个标签页</code>
<code class="example">                    :$tabclose      " 关闭末个标签页</code>
<code class="example">                    :tabclose -2    " 关闭往前第二个标签页</code>
<code class="example">                    :tabclose +     " 关闭下个标签页</code>
<code class="example">                    :tabclose 3     " 关闭第三个标签页</code>
<code class="example">                    :tabclose $     " 关闭末个标签页</code>
<code class="example">                    :tabclose #     " 关闭最近访问的标签页</code>


                                                        <b class="vimtag"> <a name=":tabo">:tabo</a> </b> <b class="vimtag"> <a name=":tabonly">:tabonly</a> </b>
:tabo[nly][!]   关闭所有其它的标签页。
                如果置位 <a href="options.html#'hidden'">'hidden'</a> 选项，所有关闭窗口的缓冲区成为隐藏。
                如果没有置位 <a href="options.html#'hidden'">'hidden'</a> 但置位 <a href="options.html#'autowrite'">'autowrite'</a> 选项，写回修改过的缓
                冲区。否则，包含修改过的缓冲区的窗口不会被删除。但如果给出
                [!]，这些窗口成为隐藏。修改过的缓冲区永远不会被放弃，所以永远
                不被丢失这些改动。 
<code class="example">                    :tabonly        " 关闭除了当前页的所有标签页</code>
<code class="example"></code>
:<code class="special">{count}</code>tabo[nly][!]
:tabo[nly][!] <code class="special">{count}</code>
                关闭除了 <code class="special">{count}</code> 以外的所有的标签页。 
<code class="example">                    :.tabonly       " 同上</code>
<code class="example">                    :-tabonly       " 关闭除了上一页之外的所有标签页</code>
<code class="example">                    :+tabonly       " 关闭除了下一页之外的所有标签页</code>
<code class="example">                    :1tabonly       " 关闭除了首页之外的所有标签页</code>
<code class="example">                    :$tabonly       " 关闭除了末页之外的所有标签页</code>
<code class="example">                    :tabonly -      " 关闭除了上一页之外的所有标签页</code>
<code class="example">                    :tabonly +2     " 关闭除了往后第二页之外的所有标签页</code>
<code class="example">                    :tabonly 1      " 关闭除了首页之外的所有标签页</code>
<code class="example">                    :tabonly $      " 关闭除了末页之外的所有标签页</code>
<code class="example">                    :tabonly #      " 关闭除了最近访问的标签页之外的所有标签页</code>
<code class="example"></code>
<code class="example"></code>
切 换 到 另 一 个 标 签 页:

使用鼠标: 如果显示标签页行，某个标签页标签上单击可以切换到该标签页。没有标签的
地方点击则转到下一个标签页。 <a href="options.html#'tabline'">'tabline'</a> 

:tabn[ext]                              <b class="vimtag"> <a name=":tabn">:tabn</a> </b> <b class="vimtag"> <a name=":tabnext">:tabnext</a> </b> <b class="vimtag"> <a name="gt">gt</a> </b>
<code class="special">&lt;C-PageDown&gt;</code>                            <b class="vimtag"> <a name="CTRL-%3CPageDown%3E">CTRL-&lt;PageDown&gt;</a> </b> <b class="vimtag"> <a name="%3CC-PageDown%3E">&lt;C-PageDown&gt;</a> </b>
gt                                      <b class="vimtag"> <a name="i_CTRL-%3CPageDown%3E">i_CTRL-&lt;PageDown&gt;</a> </b> <b class="vimtag"> <a name="i_%3CC-PageDown%3E">i_&lt;C-PageDown&gt;</a> </b>
                转到下一个标签页。最后一个标签页则回绕到第一个。

:<code class="special">{count}</code>tabn[ext]
:tabn[ext] <code class="special">{count}</code>
                转到第 <code class="special">{count}</code> 个标签页。首个标签页编号为一。 
<code class="example">                    :-tabnext   " 转到上个标签页</code>
<code class="example">                    :+tabnext   " 转到下个标签页</code>
<code class="example">                    :+2tabnext  " 转到往后第二个标签页</code>
<code class="example">                    :1tabnext   " 转到首个标签页</code>
<code class="example">                    :$tabnext   " 转到末个标签页</code>
<code class="example">                    :tabnext $  " 同上</code>
<code class="example">                    :tabnext #  " 转到最近访问的标签页</code>
<code class="example">                    :tabnext -  " 转到上个标签页</code>
<code class="example">                    :tabnext -1 " 同上</code>
<code class="example">                    :tabnext +  " 转到下个标签页</code>
<code class="example">                    :tabnext +1 " 同上</code>
<code class="example"></code>
<code class="special">{count}</code><code class="special">&lt;C-PageDown&gt;</code>
<code class="special">{count}</code>gt       转到第 <code class="special">{count}</code> 个标签页。首个标签页编号为一。


:tabp[revious]                          <b class="vimtag"> <a name=":tabp">:tabp</a> </b> <b class="vimtag"> <a name=":tabprevious">:tabprevious</a> </b> <b class="vimtag"> <a name="gT">gT</a> </b> <b class="vimtag"> <a name=":tabN">:tabN</a> </b>
:tabN[ext]                              <b class="vimtag"> <a name=":tabNext">:tabNext</a> </b> <b class="vimtag"> <a name="CTRL-%3CPageUp%3E">CTRL-&lt;PageUp&gt;</a> </b>
<code class="special">&lt;C-PageUp&gt;</code>                       <b class="vimtag"> <a name="%3CC-PageUp%3E">&lt;C-PageUp&gt;</a> </b> <b class="vimtag"> <a name="i_CTRL-%3CPageUp%3E">i_CTRL-&lt;PageUp&gt;</a> </b> <b class="vimtag"> <a name="i_%3CC-PageUp%3E">i_&lt;C-PageUp&gt;</a> </b>
gT              转到前一个标签页。首个标签页则回绕到最后一个。

:tabp[revious] <code class="special">{count}</code>
:tabN[ext] <code class="special">{count}</code>
<code class="special">{count}</code><code class="special">&lt;C-PageUp&gt;</code>
<code class="special">{count}</code>gT       转到前面 <code class="special">{count}</code> 个标签页。首个标签页则回绕到最后一个。<code class="note">注意</code>
                <code class="special">{count}</code> 的用法和  <a href="tabpage.html#:tabnext">:tabnext</a>  不同，后者它用作标签页号。

:tabr[ewind]                    <b class="vimtag"> <a name=":tabfir">:tabfir</a> </b> <b class="vimtag"> <a name=":tabfirst">:tabfirst</a> </b> <b class="vimtag"> <a name=":tabr">:tabr</a> </b> <b class="vimtag"> <a name=":tabrewind">:tabrewind</a> </b>
:tabfir[st]     转到第一个标签页。

                                                        <b class="vimtag"> <a name=":tabl">:tabl</a> </b> <b class="vimtag"> <a name=":tablast">:tablast</a> </b>
:tabl[ast]      转到最后一个标签页。

                                        <b class="vimtag"> <a name="g%3CTab%3E">g&lt;Tab&gt;</a> </b> <b class="vimtag"> <a name="CTRL-W_g%3CTab%3E">CTRL-W_g&lt;Tab&gt;</a> </b> <b class="vimtag"> <a name="%3CC-Tab%3E">&lt;C-Tab&gt;</a> </b>
g<code class="special">&lt;Tab&gt;</code>          转到最近访问的标签页。

其它命令:
                                                        <b class="vimtag"> <a name=":tabs">:tabs</a> </b>
:tabs           列出标签页和它们包含的窗口。
                当前窗口显示 "&gt;"。
                修改过的缓冲区显示 "+"。
                例如:
<code class="section">                        Tab page 1 </code>
<code class="section">                          + tabpage.txt </code>
<code class="section">                            ex_docmd.c </code>
<code class="section">                        Tab page 2 </code>
<code class="section">                        &gt;   main.c </code>



重 新 排 列 标 签 页:

:tabm[ove] <code class="special">[N]</code>                                          <b class="vimtag"> <a name=":tabm">:tabm</a> </b> <b class="vimtag"> <a name=":tabmove">:tabmove</a> </b>
:[N]tabm[ove]
                把当前标签页移到第 N 个标签页之后。用 0 使当前标签页成为首个标
                签页。计算 N 是在移动前，所以如果第二个标签页是当前标签页，
                `:tabmove 1` 和 `:tabmove 2` 没有效果。
                如果没有 N，当前标签页成为最后一个。 
<code class="example">                    :.tabmove   " 什么都不做</code>
<code class="example">                    :-tabmove   " 往左移动当前标签页</code>
<code class="example">                    :+tabmove   " 往右移动当前标签页</code>
<code class="example">                    :0tabmove   " 移动当前标签页到标签页之首</code>
<code class="example">                    :tabmove 0  " 同上</code>
<code class="example">                    :tabmove    " 移动当前标签页到标签页之末</code>
<code class="example">                    :$tabmove   " 同上</code>
<code class="example">                    :tabmove $  " 同上</code>
<code class="example">                    :tabmove #  " 移动当前标签页到最近访问的标签页之后</code>
<code class="example"></code>
:tabm[ove] +[N]
:tabm[ove] -[N]
                移动当前标签页向右 (用 + 的话) 或向左 (用 - 的话) N 个位置。 
<code class="example">                    :tabmove -  " 往左移动当前标签页</code>
<code class="example">                    :tabmove -1 " 同上</code>
<code class="example">                    :tabmove +  " 往右移动当前标签页</code>
<code class="example">                    :tabmove +1 " 同上</code>
<code class="example"></code>
<code class="note">注意</code> 可以用 :Ntabmove 来移动标签页到第 N 个标签页之后，也可用 :+Ntabmove 来移
动 N 个位置。在此情形下 +N 的实际含义可见  <a href="cmdline.html#[range]">[range]</a>  处的解释。


循 环 遍 历 所 有 标 签 页:

                                                        <b class="vimtag"> <a name=":tabd">:tabd</a> </b> <b class="vimtag"> <a name=":tabdo">:tabdo</a> </b>
:<code class="special">[range]</code>tabd[o] <code class="special">{cmd}</code>
                对每个标签页执行 <code class="special">{cmd}</code>，如果给出 <code class="special">[range]</code>，只对页号在 <code class="special">[range]</code>
                内的标签页执行。
                大致相当于: 
<code class="example">                        :tabfirst</code>
<code class="example">                        :{cmd}</code>
<code class="example">                        :tabnext</code>
<code class="example">                        :{cmd}</code>
<code class="example">                        等等</code>
                只对每个标签页的当前窗口进行操作。如果某个标签页出现错误，不再
                继续访问其余的标签页。
                最后一个标签页 (或任何出错的标签页) 成为当前标签页。
                <code class="special">{cmd}</code> 可以包含 '|' 以连接多个命令。
                <code class="special">{cmd}</code> 不能打开标签页、关闭标签页或重排标签页。
                另见  <a href="windows.html#:windo">:windo</a> 、 <a href="editing.html#:argdo">:argdo</a> 、 <a href="windows.html#:bufdo">:bufdo</a> 、 <a href="quickfix.html#:cdo">:cdo</a> 、 <a href="quickfix.html#:ldo">:ldo</a> 、 <a href="quickfix.html#:cfdo">:cfdo</a>  和
                 <a href="quickfix.html#:lfdo">:lfdo</a> 

</section><hr class="doubleline" /><section class=inner>
<h4>3. 其它项目                                             <b class="vimtag"> <a name="tab-page-other">tab-page-other</a> </b></h4>
                                                        <b class="vimtag"> <a name="tabline-menu">tabline-menu</a> </b>
GUI 标签页行提供弹出菜单。用右键点击可以访问。它包含的项目有:
        Close           关闭鼠标指针所在的标签页。如果鼠标指针不在任何标签上，
                        关闭当前标签页。
        New Tab         打开新标签页并编辑空缓冲区。该标签页出现在鼠标指针的左
                        侧。
        Open Tab...     类似于 "New Tab"，但同时提供文件选择器以选择要编辑的文
                        件。

每个标签页对比较模式进行分别的处理。你可以在一个标签页上比较若干文件。而在另一
个标签页上比较不同的文件。

局部于标签页的变量以 "t:" 开头。 <a href="eval.html#tabpage-variable">tabpage-variable</a> 

目前只有一个局部于标签页的选项: <a href="options.html#'cmdheight'">'cmdheight'</a>。

                                                <b class="vimtag"> <a name="tabnew-autocmd">tabnew-autocmd</a> </b>
TabLeave 和 TabEnter 自动命令事件可以在标签页切换时执行任务。准确的顺序取决于
你做的事情。建立新标签页相当于先建立工作于同一缓冲区的新窗口，再在其上编辑别的
缓冲区。所以，":tabnew" 依次激活:
        WinLeave                离开当前窗口
        TabLeave                离开当前标签页
        WinEnter                进入新标签页的窗口
        TabEnter                进入新标签页
        BufLeave                离开当前缓冲区
        BufEnter                进入新的空白缓冲区

而切换到另一个标签页的相应顺序是:
        BufLeave
        WinLeave
        TabLeave
        TabEnter
        WinEnter
        BufEnter

</section><hr class="doubleline" /><section class=inner>
<h4>4. 设置 <a href="options.html#'tabline'">'tabline'</a>                                       <b class="vimtag"> <a name="setting-tabline">setting-tabline</a> </b></h4>
<a href="options.html#'tabline'">'tabline'</a> 选项指定标签页行的外观。只有没有 GUI 标签页行时才使用该选项。

用 <a href="options.html#'showtabline'">'showtabline'</a> 选项可以指定何时显示标签页行: 从不、多于一个标签页才显示、总
是。

标签页行的高亮用 TabLine、TabLineSel 和 TabLineFill 分别指定。 <a href="syntax.html#hl-TabLine">hl-TabLine</a> 
 <a href="syntax.html#hl-TabLineSel">hl-TabLineSel</a>   <a href="syntax.html#hl-TabLineFill">hl-TabLineFill</a> 

包含修改过的窗口的标签页会显示 "+"。同时也显示该标签页里包含的窗口数。所以，
"3+" 意味着有三个窗口，其中一个有修改过的缓冲区。

<a href="options.html#'tabline'">'tabline'</a> 选项允许你定义自己喜欢的标签页标签显示方式。实现并不简单，所以这里给
出一个例子。

基本知识见 <a href="options.html#'statusline'">'statusline'</a> 选项。<a href="options.html#'tabline'">'tabline'</a> 选项可以使用相同的项目。此外，还可用
 <a href="builtin.html#tabpagebuflist()">tabpagebuflist()</a> 、 <a href="builtin.html#tabpagenr()">tabpagenr()</a>  和  <a href="builtin.html#tabpagewinnr()">tabpagewinnr()</a>  函数。

因为标签页标签的编号可以不同，你可以指定整个选项为一个函数。就像这样: 
<code class="example">        :set tabline=%!MyTabLine()</code>
<code class="example"></code>
然后定义 MyTabLine() 函数以列出所有标签页标签。一个方便的方式是把该函数分成两
部分: 首先遍历所有的标签页并分别定义它们的标签。然后得到每个标签页的标签。 
<code class="example"></code>
<code class="example">        function MyTabLine()</code>
<code class="example">          let s = ''</code>
<code class="example">          for i in range(tabpagenr('$'))</code>
<code class="example">            " 选择高亮</code>
<code class="example">            if i + 1 == tabpagenr()</code>
<code class="example">              let s ..= '%#TabLineSel#'</code>
<code class="example">            else</code>
<code class="example">              let s ..= '%#TabLine#'</code>
<code class="example">            endif</code>
<code class="example"></code>
<code class="example">            " 设置标签页号 (用于鼠标点击)</code>
<code class="example">            let s ..= '%' .. (i + 1) .. 'T'</code>
<code class="example"></code>
<code class="example">            " MyTabLabel() 提供标签</code>
<code class="example">            let s ..= ' %{MyTabLabel(' .. (i + 1) .. ')} '</code>
<code class="example">          endfor</code>
<code class="example"></code>
<code class="example">          " 最后一个标签页之后用 TabLineFill 填充并复位标签页号</code>
<code class="example">          let s ..= '%#TabLineFill#%T'</code>
<code class="example"></code>
<code class="example">          " 右对齐用于关闭当前标签页的标签</code>
<code class="example">          if tabpagenr('$') &gt; 1</code>
<code class="example">            let s ..= '%=%#TabLine#%999Xclose'</code>
<code class="example">          endif</code>
<code class="example"></code>
<code class="example">          return s</code>
<code class="example">        endfunction</code>
<code class="example"></code>
现在为每个标签页调用 MyTabLabel() 函数以得到它们的标签。 
<code class="example"></code>
<code class="example">        function MyTabLabel(n)</code>
<code class="example">          let buflist = tabpagebuflist(a:n)</code>
<code class="example">          let winnr = tabpagewinnr(a:n)</code>
<code class="example">          return bufname(buflist[winnr - 1])</code>
<code class="example">        endfunction</code>
<code class="example"></code>
这只是一个产生和缺省值类似的标签页行的简单例子，和缺省的区别是修改过的缓冲区没
有加上 + 号，而名字也没有被截短。如果空间不足，你需要用聪明一些的方法来缩短标
签宽度。<a href="options.html#'columns'">'columns'</a> 选项可以查看可用的空间。

</section><hr class="doubleline" /><section class=inner>
<h4>5. 设置 <a href="options.html#'guitablabel'">'guitablabel'</a>                                   <b class="vimtag"> <a name="setting-guitablabel">setting-guitablabel</a> </b></h4>
如果显示 GUI 的标签页行，<a href="options.html#'guitablabel'">'guitablabel'</a> 可以用来指定每个标签页显示的标签。和
<a href="options.html#'tabline'">'tabline'</a> 不同，后者一次指定整个标签页行，而 <a href="options.html#'guitablabel'">'guitablabel'</a> 分别指定每个标签。

<a href="options.html#'guitabtooltip'">'guitabtooltip'</a> 与之非常类似，但用来设置同一标签的工具提示。因为只有在鼠标指针
在标签上逗留时它才会出现，所以通常可以长一些。不过，只有部分系统支持。

<a href="options.html#'statusline'">'statusline'</a> 选项说明本选项值的格式。

用 "%N" 项目可以得到当前的标签页号。计算此选项时， <a href="eval.html#v:lnum">v:lnum</a>  变量也设置为该值。
使用文件名的项目引用当前标签页的当前窗口。

<code class="note">注意</code> 此选项不使用语法高亮。也忽略 %T 和 %X 项目。

简单示例，在标签页标签上显示标签页号和缓冲区名: 
<code class="example">        :set guitablabel=%N\ %f</code>
<code class="example"></code>
模拟 <a href="options.html#'guitablabel'">'guitablabel'</a> 缺省值的示例: 显示标签页里的窗口数目，如果有修改过的缓冲
区，显示 '+': 
<code class="example"></code>
<code class="example">        function GuiTabLabel()</code>
<code class="example">          let label = ''</code>
<code class="example">          let bufnrlist = tabpagebuflist(v:lnum)</code>
<code class="example"></code>
<code class="example">          " 如果标签页里有修改过的缓冲区，加上 '+'</code>
<code class="example">          for bufnr in bufnrlist</code>
<code class="example">            if getbufvar(bufnr, "&amp;modified")</code>
<code class="example">              let label = '+'</code>
<code class="example">              break</code>
<code class="example">            endif</code>
<code class="example">          endfor</code>
<code class="example"></code>
<code class="example">          " 如果标签页里的窗口数目多于一，加上窗口数目</code>
<code class="example">          let wincount = tabpagewinnr(v:lnum, '$')</code>
<code class="example">          if wincount &gt; 1</code>
<code class="example">            let label ..= wincount</code>
<code class="example">          endif</code>
<code class="example">          if label != ''</code>
<code class="example">            let label ..= ' '</code>
<code class="example">          endif</code>
<code class="example"></code>
<code class="example">          " 附加缓冲区名</code>
<code class="example">          return label .. bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])</code>
<code class="example">        endfunction</code>
<code class="example"></code>
<code class="example">        set guitablabel=%{GuiTabLabel()}</code>

<code class="note">注意</code> 设置选项值前就必须已经定义好函数。否则会报错，提示函数未知。

如果你希望回到缺省的标签，返回空字符串。

如果你希望显示标签页特定的内容，可以使用局部于标签页的变量。 <a href="eval.html#t:var">t:var</a> 


 vim:tw=78:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
